Django এর বিল্ট-ইন Pagination সিস্টেম

Web Development - জ্যাঙ্গো (Django) - Django Pagination এবং Filtering
158

Django এর Pagination সিস্টেম ব্যবহার করে আপনি বড় বড় ডেটাসেট বা লিস্টগুলোকে পৃষ্ঠায় বিভক্ত করতে পারেন, যাতে ওয়েব পেজের লোডিং টাইম দ্রুত হয় এবং ইউজারের জন্য ডেটা সহজে অ্যাক্সেসযোগ্য হয়। এটি সাধারণত ব্লগ পেজ, প্রোডাক্ট লিস্ট, বা অন্যান্য দীর্ঘ লিস্টে ব্যবহৃত হয়।

Django তে Pagination সহজেই ব্যবহার করা যায়, কারণ এটি একটি বিল্ট-ইন ফিচার সরবরাহ করে যা আপনাকে বড় ডেটা সেটকে ছোট ছোট অংশে ভাগ করে ব্যবহারকারীদের কাছে প্রদর্শন করতে সাহায্য করে।


Django Pagination কনফিগারেশন

১. ভিউ ফাংশনে Pagination যোগ করা

Django তে Pagination ব্যবহারের জন্য প্রথমে আপনাকে ভিউ ফাংশনে পৃষ্ঠায় বিভক্ত করার জন্য Paginator এবং Page ক্লাস ব্যবহার করতে হবে। এই ক্লাস দুটি Django এর django.core.paginator মডিউল থেকে ইমপোর্ট করা যায়।

এখন একটি উদাহরণ দেখি, যেখানে আমরা একটি তালিকা বা ব্লগ পোস্ট পৃষ্ঠা পৃষ্ঠায় বিভক্ত করব।

from django.core.paginator import Paginator
from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all()  # সব পোস্ট নিয়ে আসুন
    paginator = Paginator(posts, 5)  # প্রতি পৃষ্ঠায় 5টি পোস্ট দেখানো হবে

    page_number = request.GET.get('page')  # URL থেকে পেজ নম্বর পাওয়া
    page_obj = paginator.get_page(page_number)  # পৃষ্ঠার পোস্টগুলি

    return render(request, 'post_list.html', {'page_obj': page_obj})

এখানে:

  • Paginator(posts, 5): এটি Post মডেল থেকে সব পোস্ট নেয় এবং প্রতি পৃষ্ঠায় 5টি পোস্ট দেখানোর জন্য পৃষ্ঠাগুলিতে বিভক্ত করে।
  • request.GET.get('page'): এটি URL থেকে পৃষ্ঠার নম্বর নেয়। উদাহরণস্বরূপ, যদি ইউজার /page/2/ পৃষ্ঠা URLটি ব্যবহার করে, তাহলে এটি 2 পৃষ্ঠার নম্বর ফেরত দেবে।
  • paginator.get_page(page_number): এটি বর্তমান পৃষ্ঠার পোস্টগুলির তালিকা প্রদান করবে।

২. HTML টেমপ্লেটে Pagination দেখানো

এখন, আপনি post_list.html টেমপ্লেট ফাইলে পৃষ্ঠাগুলির লিঙ্কগুলো দেখাতে পারেন, যাতে ব্যবহারকারী পরবর্তী বা পূর্ববর্তী পৃষ্ঠায় যেতে পারেন।

<!-- post_list.html -->
{% for post in page_obj %}
    <h2>{{ post.title }}</h2>
    <p>{{ post.content }}</p>
{% endfor %}

<div class="pagination">
    <span class="step-links">
        {% if page_obj.has_previous %}
            <a href="?page=1">« first</a>
            <a href="?page={{ page_obj.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
        </span>

        {% if page_obj.has_next %}
            <a href="?page={{ page_obj.next_page_number }}">next</a>
            <a href="?page={{ page_obj.paginator.num_pages }}">last »</a>
        {% endif %}
    </span>
</div>

এখানে:

  • page_obj.has_previous: চেক করা হচ্ছে যে, পূর্ববর্তী পৃষ্ঠা আছে কি না। যদি থাকে, তাহলে previous লিঙ্কটি দেখানো হবে।
  • page_obj.has_next: চেক করা হচ্ছে যে, পরবর্তী পৃষ্ঠা আছে কি না। যদি থাকে, তাহলে next লিঙ্কটি দেখানো হবে।
  • page_obj.number: এটি বর্তমান পৃষ্ঠার নম্বর দেখায়।
  • page_obj.paginator.num_pages: এটি মোট পৃষ্ঠার সংখ্যা দেখায়।

৩. পৃষ্ঠার নম্বর নির্ধারণ

এছাড়া, আপনি পৃষ্ঠার মধ্যে কতটি আইটেম দেখতে চান, তা নির্ধারণ করার জন্য per_page পরামিতি ব্যবহার করতে পারেন। যেমন, প্রতি পৃষ্ঠায় 10টি আইটেম দেখানো।

paginator = Paginator(posts, 10)  # প্রতি পৃষ্ঠায় 10টি পোস্ট দেখানো হবে

এটি আপনার পৃষ্ঠায় 10টি আইটেম করে দেখাবে এবং পৃষ্ঠাগুলিতে বিভক্ত হবে।


৪. অতিরিক্ত: ডিফল্ট পৃষ্ঠা সেট করা

পৃষ্ঠার নম্বর যদি নির্দিষ্ট না থাকে, তবে Django ডিফল্টভাবে প্রথম পৃষ্ঠা দেখাবে। আপনি যদি চান যে, কোনও নির্দিষ্ট পৃষ্ঠা ডিফল্ট হিসেবে দেখানো হোক, তাহলে সেটিও করতে পারেন। উদাহরণস্বরূপ:

page_number = request.GET.get('page', 1)  # যদি পেজ নম্বর না থাকে তবে ১ নাম্বার পৃষ্ঠা দেখাবে

এটি যদি URL থেকে কোনও পৃষ্ঠার নম্বর না পাওয়া যায়, তবে ডিফল্টভাবে প্রথম পৃষ্ঠা (১) দেখাবে।


উপসংহার

Django এর Pagination সিস্টেম ব্যবহার করে আপনি সহজেই বড় ডেটাসেটগুলিকে পৃষ্ঠায় বিভক্ত করতে পারেন এবং ব্যবহারকারীদের জন্য একটি নির্দিষ্ট সংখ্যক আইটেম একসাথে দেখাতে পারেন। Django এর বিল্ট-ইন Paginator এবং Page ক্লাস গুলি এই কাজকে সহজ করে তোলে এবং আপনার অ্যাপ্লিকেশনের পারফর্মেন্স বৃদ্ধি করতে সাহায্য করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...